#!/usr/bin/env node

/**
 * 删除远程数据库中的所有表
 * 功能：清空数据库，让应用重新自动创建表结构
 */

const mysql = require('mysql2/promise');

const remoteDbConfig = {
    host: '43.143.253.188',
    port: 3306,
    user: 'nextjs',
    password: 'yEAiRE2jcxTyRBy5',
    database: 'nextjs',
    charset: 'utf8mb4'
};

async function dropAllTables() {
    let connection;
    
    try {
        console.log('🔌 连接远程数据库...');
        connection = await mysql.createConnection(remoteDbConfig);
        console.log('✅ 远程数据库连接成功');
        
        // 禁用外键检查
        console.log('🔧 禁用外键检查...');
        await connection.execute('SET FOREIGN_KEY_CHECKS = 0');
        
        // 获取所有表名
        console.log('📋 获取所有表名...');
        const [tables] = await connection.execute(`
            SELECT table_name 
            FROM information_schema.tables 
            WHERE table_schema = ? AND table_type = 'BASE TABLE'
        `, [remoteDbConfig.database]);
        
        console.log(`📊 找到 ${tables.length} 个表需要删除:`);
        tables.forEach((table, index) => {
            console.log(`   ${index + 1}. ${table.table_name}`);
        });
        
        // 提取表名数组
        const tableNames = tables.map(table => table.table_name);
        
        if (tables.length === 0) {
            console.log('✅ 数据库中没有表需要删除');
            return;
        }
        
        // 删除所有表
        console.log('\n🗑️ 开始删除所有表...');
        let successCount = 0;
        let errorCount = 0;
        
        for (const tableName of tableNames) {
            try {
                await connection.execute(`DROP TABLE IF EXISTS \`${tableName}\``);
                console.log(`✅ 删除表: ${tableName}`);
                successCount++;
            } catch (error) {
                console.error(`❌ 删除表失败 ${tableName}:`, error.message);
                errorCount++;
            }
        }
        
        // 重新启用外键检查
        console.log('\n🔧 重新启用外键检查...');
        await connection.execute('SET FOREIGN_KEY_CHECKS = 1');
        
        // 验证删除结果
        console.log('\n🔍 验证删除结果...');
        const [remainingTables] = await connection.execute(`
            SELECT COUNT(*) as count 
            FROM information_schema.tables 
            WHERE table_schema = ? AND table_type = 'BASE TABLE'
        `, [remoteDbConfig.database]);
        
        console.log(`📊 删除完成统计:`);
        console.log(`   成功删除: ${successCount} 个表`);
        console.log(`   删除失败: ${errorCount} 个表`);
        console.log(`   剩余表数: ${remainingTables[0].count} 个`);
        
        if (remainingTables[0].count === 0) {
            console.log('\n🎉 所有表已成功删除！数据库已清空，可以重新创建表结构。');
        } else {
            console.log('\n⚠️ 仍有表未删除，请检查错误信息。');
        }
        
    } catch (error) {
        console.error('❌ 删除表过程中发生错误:', error.message);
        throw error;
    } finally {
        if (connection) {
            await connection.end();
            console.log('\n🔌 数据库连接已关闭');
        }
    }
}

// 运行删除
async function main() {
    console.log('🎯 数据库表删除脚本');
    console.log('   功能：删除远程数据库中的所有表，为重新创建做准备\n');
    
    console.log('⚠️ 警告: 此操作将删除数据库中的所有表和数据！');
    console.log('💡 建议在执行前备份重要数据。');
    console.log('');
    
    await dropAllTables();
}

// 如果直接运行此脚本
if (require.main === module) {
    main().catch((error) => {
        console.error('💥 删除脚本执行失败:', error.message);
        process.exit(1);
    });
}

module.exports = { dropAllTables };
